For a memory with an error correction code (i.e., ECC) support, information is stored with redundant bits as ECC parity. Due to a variety of noise sources, errors can occur when reading the information from the memory. If a severity of the errors does not exceed the error correction capability of the ECC, the information can be corrected. However, ECCs are limited and the available space in the memory for the redundant bits is finite. Therefore, certain error patterns are not correctable by the ECC and so are called uncorrectable errors. Typically, the error correction capability is measured in the number of incorrect bits that can be corrected by the ECC. To avoid single-bit errors accumulating into multi-bit errors that are uncorrectable, a memory scrubbing technique is commonly implemented. The scrubbing technique is a background task that reads the information stored in memory periodically and detects and/or corrects errors with an ECC decoder. A frequency of the memory scrubbing is chosen such that uncorrectable errors are unlikely to occur before a next scrub. Memory scrubbing is used in volatile memories, such as dynamic random access memory (i.e., DRAM) and static random access memory (i.e., SRAM).
For nonvolatile memories, such as flash memory, errors also accumulate over time. Memory scrubbing of nonvolatile memories is useful as a precaution against the uncorrectable errors. However, due to different characteristics, flash memory scrubbing carries different implications than traditional scrubbing techniques for DRAM or SRAM.
It would be desirable to implement a flash memory read scrub and channel tracking.